package dao

import (
	"math/rand"

	"gorm.io/gorm"
)

// GetTypeName 返回题型名称
func GetTypeName(qType int) string {
	switch qType {
	case 1:
		return "单选"
	case 2:
		return "多选"
	case 3:
		return "判断"
	default:
		return "未知"
	}
}

// GetQuestionsByIDs 根据题目ID批量查询题目
func GetQuestionsByIDs(ids []int) ([]ExamQuestions, error) {
	if DB == nil {
		return nil, gorm.ErrInvalidDB
	}
	var questions []ExamQuestions
	if err := DB.Where("id IN ?", ids).Find(&questions).Error; err != nil {
		return nil, err
	}
	return questions, nil
}

// ExamQuestions 题目信息表
type ExamQuestions struct {
	ID            int    `gorm:"primaryKey" json:"id"`                     // 主键ID
	Type          int    `gorm:"not null" json:"type"`                     // 题型：1=单选题, 2=多选题, 3=判断题
	Content       string `gorm:"type:text;not null" json:"content"`        // 题目内容（题干）
	CorrectAnswer string `gorm:"type:text;not null" json:"correct_answer"` // 正确答案
	Explanation   string `gorm:"type:text" json:"explanation"`             // 答案解析
	CreatedAt     string `gorm:"type:datetime" json:"created_at"`          // 创建时间
	UpdatedAt     string `gorm:"type:datetime" json:"updated_at"`          // 最后更新时间
}

// 表名称
func (ExamQuestions) TableName() string {
	return "exam_questions"
}

// RandomQuestionsByType 随机获取指定类型的题目
func RandomQuestionsByType(qType int, count int) ([]ExamQuestions, error) {
	var questions []ExamQuestions
	if DB == nil {
		return nil, gorm.ErrInvalidDB
	}
	// 查询所有指定类型题目
	if err := DB.Where("type = ?", qType).Find(&questions).Error; err != nil {
		return nil, err
	}
	// 随机抽取 count 个
	if len(questions) <= count {
		return questions, nil
	}
	indices := rand.Perm(len(questions))[:count]
	var result []ExamQuestions
	for _, idx := range indices {
		result = append(result, questions[idx])
	}
	return result, nil
}
